package cn.lk1234.imt.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * 登录拦截器 参考模版
 * 
 * @author lk
 * @since 2017-02-07 14:50:33
 */
public class LoginInterceptor implements HandlerInterceptor {

	// 配置文件中配置的不拦截的路径（方式2，暂不使用）
//	private List<String> excludedUrls;
//	public void setExcludeUrls(List<String> excludeUrls) {
//		this.excludedUrls = excludeUrls;
//	}

	/**
	 * 登录拦截器 参考模版
	 * 
	 * @author lk
	 * @since 2017-02-07 14:50:33
	 */
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {

//		lkNote获取请求URL
//		http://localhost:8080/day10_2/AServlet?username=xxx&password=yyy
//	　　　　> String getScheme()：获取协议，http
//	　　　　> String getServerName()：获取服务器名，localhost
//	　　　　> String getServerPort()：获取服务器端口，8080
//	　　　　> *****String getContextPath()：获取项目名，/day10_2
//	　　　　> String getServletPath()：获取Servlet路径，/AServlet
//	　　　　> String getQueryString()：获取参数部分，即问号后面的部分。username=xxx&password=yyy
//	　　　　> String getRequestURI()：获取请求URI，等于项目名+Servlet路径。/day10_2/AServlet
//	　　　　> String getRequestURL()：获取请求URL，等于不包含参数的整个请求路径。http://localhost:8080/day10_2/AServlet
		
		// 获取请求路径（方式2，暂不使用）
		//String requestUri = request.getRequestURI();
		// 循环遍历请求路径是否是不拦截的路径之一
		/*for (String url : excludedUrls) {
			if (requestUri.endsWith(url)) {
				return true;
			}
		}*/

		/*
		 * //获取请求的url String url = request.getRequestURI(); //判断url是否是公开
		 * 地址（实际使用时将公开 地址配置配置文件中） //这里公开地址是登陆提交的地址
		 * if(url.indexOf("login.action")>=0){ //如果进行登陆提交，放行 return true; }
		 */

		// 判断session
		HttpSession session = request.getSession();
		// 从session中取出用户身份信息
		String username = (String) session.getAttribute("userName");

		if (username != null) {
			// 身份存在，说明之前登录过，放行
			return true;
		}

		// 执行这里表示用户身份需要认证，跳转登陆页面
		// request.getRequestDispatcher("/imt/views/homePage.jsp").forward(request, response);
		response.sendRedirect(request.getContextPath() + "/");
		
		// return false表示拦截，不向下执行
		// return true表示放行
		return false;
	}

	/**
	 * 进入Handler方法之后，返回modelAndView之前执行
	 * 应用场景从modelAndView出发：将公用的模型数据(比如菜单导航)在这里传到视图，也可以在这里统一指定视图
	 * 
	 * @author lk
	 * @since 2017-02-07 14:50:33
	 */
	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {

	}

	/**
	 * 执行Handler完成执行此方法 应用场景：统一异常处理，统一日志处理
	 * 
	 * @author lk
	 * @since 2017-02-07 14:50:33
	 */
	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {

	}

}
